import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.*;
/**
 * Esta clase representa un interruptor que se active para abrir la puerta de cada scenario
 * 
 * @author Sánchez Ovalle Daniel, Alcantar Noyola Christian Andrés
 * @version 29-04-13
 */
public class Interruptor extends Actor
{
    private GreenfootImage imageinterruptor[]=new GreenfootImage [2];
    private Jugador chango;
    private Contador llave;
    private boolean band;
    private Date tiempoInicial;
    private Date tiempoActual;
    private int tiempoTranscurrido;
    private int limite;
    private Contador cont;

    /**
     * Constructor de la clase Interruptor. 
     */
    public Interruptor()
    {  
        chango=null;  
        band=false;
        tiempoTranscurrido=0;
        this.CargarImagen();
    }

    /**
     * En este metodo se calcula el limite de segundos cuando el interruptor se agrega al mundo.
     */
    public void addedToWorld(World world)
    {
        Escenario1 mundo=(Escenario1)this.getWorld();
        limite=(mundo.getNivel()+32)-(mundo.getNivel()*3);
    }

    /**
     * En este metodo se revisa si se activara el interruptor.
     */
    public void act()
    {
        Escenario1 mundo= (Escenario1) super.getWorld();
        this.encontrarChango();
        if(chango!=null && Greenfoot.isKeyDown("v") && llave.getValor()==mundo.getNivel() && band==false)     
        {
            this.CambiaImagen();
            cont=new Contador(limite,mundo,this.getX(),this.getY(),13,13);
            cont.addToWorld(mundo,this.getX(),this.getY()-35);
        }
        if(band)
            this.actualizaTiempo();     
    }          

    /**
     * Este metodo carga las imagenes del interruptor.
     */
    public void CargarImagen()
    {
        for(int i=0;i<2;i++)
            imageinterruptor[i]=(new GreenfootImage("interruptor"+(i)+".png"));    
    }

    /**
     * Este metodo revisa si el chango se encuentra en el interruptor.
     */
    public void encontrarChango()
    {
        chango=(Jugador)this.getOneIntersectingObject(Jugador.class);
        if(chango!=null)
            llave=chango.getLlaves();
    }

    /**
     * Este metodo cambia la imagen del interruptor y las banderas que indican si el interruptor y la puerta estan activados.
     * tambien inicializa la cuenta del tiempo del interruptor.
     */
    public void CambiaImagen()
    {      
        Escenario1 mundo=(Escenario1)this.getWorld();
        super.setImage(imageinterruptor[1]);
        band=true;
        mundo.cambiaBandPuerta(true);
        tiempoInicial=new Date();
    }

    /**
     * Este metodo genera el conteo de los segundos del interruptor.
     * Si el tiempo llega al limite el interruptor y la puerta se desactivan.
     */
    public void actualizaTiempo()
    {   
        Escenario1 mundo= (Escenario1) super.getWorld();
        tiempoActual=new Date();
        tiempoTranscurrido=(int)(tiempoActual.getTime()-tiempoInicial.getTime())/1000;
        cont.fijaValor(limite-tiempoTranscurrido);

        if(tiempoTranscurrido==limite)
        {
            mundo.cambiaBandPuerta(false);
            tiempoTranscurrido=0;
            band=false;
            cont.removeFromWorld(mundo);
            cont=null;
            super.setImage(imageinterruptor[0]);
        }

    }

    /**
     * Este metodo inicializa el conteo del tiempo despues de que se inicia la ejecucion del juego.
     */
    public void started()
    {
        if(band)
        {
            limite=cont.getValor();
            tiempoInicial=new Date();
        }
    }

}
